package 代码随想录.栈与队列;

import java.util.*;

public class _2用队列实现栈 {
    /**
     * 225. 用队列实现栈
     * https://leetcode.cn/problems/implement-stack-using-queues/
     * 请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通栈的全部四种操作（push、top、pop 和 empty）。
     */
    class MyStack {
        Queue<Integer> q1;
        Queue<Integer> q2;
        public MyStack() {
            q1 = new LinkedList<Integer>();
            q2 = new LinkedList<Integer>();
        }

        public void push(int x) {
            q2.offer(x);
            while(!q1.isEmpty())
                q2.offer(q1.poll());
            Queue<Integer> queueTemp;
            queueTemp = q1;
            q1 = q2;
            q2 = queueTemp; // 最后交换queue1和queue2，将元素都放到queue1中
        }

        public int pop() {
            return q1.poll();
        }

        public int top() {
            return q1.peek();
        }

        public boolean empty() {
            return q1.isEmpty() ;
        }
    }
}
